package org.smallframework.spring.path;

import java.net.URL;
import java.util.List;
import java.util.Set;

/**
 * 资源查找抽象类
 */
public interface ClassPathScanningService {

    /**
     * 查找类资源
     * @param scanPackages 包路径,用逗号分隔
     * @return 资源url集合
     */
    default Set<URL> getClassResourcesURL(String scanPackages) {
        String[] scanPackageArr = scanPackages.split(",");
        return getClassResourcesURL(scanPackageArr);
    }

    /**
     * 查找类资源
     * @param scanPackageArr 包路径数组
     * @return 资源url集合
     */
    default Set<URL> getClassResourcesURL(String... scanPackageArr) {
        return getClassResourcesURL(null, scanPackageArr);
    }

    /**
     * 查找类资源
     * @param rootClasspath  class path根路径，如果不指定那么就在所有ClassPath下寻找
     * @param scanPackageArr 包路径数组
     * @return 资源url集合
     */
    Set<URL> getClassResourcesURL(URL rootClasspath, String... scanPackageArr);

    /**
     * 查找资源
     * @param rootClasspath    class path根路径，如果不指定那么就在所有ClassPath下寻找
     * @param locationPatterns spring格式路径
     * @return 资源url集合
     */
    default Set<URL> getResourcesURL(URL rootClasspath, List<String> locationPatterns) {
        return getResourcesURL(rootClasspath, locationPatterns.toArray(new String[0]));
    }

    /**
     * 查找资源
     * @param rootClasspath    class path根路径，如果不指定那么就在所有ClassPath下寻找
     * @param locationPatterns spring格式路径
     * @return 资源url集合
     */
    Set<URL> getResourcesURL(URL rootClasspath, String... locationPatterns);
}

